const express = require('express');
const app = express();

// 中间件1
app.use((req, res, next) => {
  req.age = 20;
  console.log(1);
  next(); // 调用next() 表示，把请求交给下一个中间件处理
});

// 中间件2
app.use('/api', (req, res, next) => {
  console.log(2);
  next();
  // next('hehe');
  // 给next传递了参数，意义上表示这里发生了错误
  // 应该把错误信息传递给 next(err)
  // 如果给 next(err) 传递了参数，会越过（跳过）后续所有中间件，直接进入最后的错误处理中间件
});

// 中间件3
app.use('/my', (req, res) => {
  console.log(3);
});

// 测试接口
app.get('/api/test', (req, res, next) => { // 中间件4
  console.log(4);
  next();
}, (req, res) => { // 中间件5
  console.log(req.age); // 20
  res.send('hello world');
});

// 最后，错误处理中间件（必须放到最后）
// 正常情况下，错误处理中间件不会运行的
app.use((err, req, res, next) => {
  console.log('我是错误处理中间件，我接收到的错误信息是：' + err);
  res.send({ status: 1, message: '身份认证失败' });
});

app.listen(3000, () => console.log('启动了'));
